/*
 * @Author: wuqingchun
 * @Date: 2024-12-03 16:58:26
 * @Description: 
 * @LastEditors: wuqingchun
 * @LastEditTime: 2024-12-03 17:37:25
 */

/**
 * constexpr 是 C++11 引入的一个关键字，用于指定变量、函数或对象的值在编译时就能确定。这有助于提高程序的性能，
 * 因为某些计算可以在编译时完成，而不是在运行时。
 * 
 */

int GetRuntimeValue(int iValue)
{
    return iValue * 10;
}

constexpr int Square(int iValue)
{
    return iValue;
}

int main(int argc, char** argv)
{
    constexpr double CONSTEXPR_PI=3.14;
    const double CONST_PI=3.14;

    constexpr int CONSTEXPR_SQUARE_OF_FIVE = 5 * 5;
    const int CONST_SQUARE_OF_FIVE = 5 * 5;

    // 运行时才能确定的值，可以用const，不能用constexpr
    int iRuntimeValue = GetRuntimeValue(argc);
    const int const_value = iRuntimeValue;
    //constexpr int constexpr_value = iRuntimeValue; // 编译错误，constexpr变量必须在编译时初始化

    //constexpr int constexpr_value2 = Square(argc); // 编译错误，argc不是编译时常量表达式
    constexpr int constexpr_value2 = Square(100); // 100为编译时常量
    return 0;
}